// import utils
import apiRequest from "./request.js";

/* --------------------------------------------------------------
 *                         Contacts API
 * -------------------------------------------------------------- */
/**
 * 新增专家人员数据
 * @param {Object} newData - 新增专家的数据
 * @param {Array} tableData - 当前表格数据
 * @returns {Promise<Object>} - 新增后的表格数据
 */
async function addExpert(newData, tableData) {
    try {
        const response = await apiRequest('POST', '/professor/addProfessor', newData);

        if (response.code === 200 && response.success) {
            // 处理新增的专家数据
            const newExpert = {
                ...newData,
                id: tableData.length + 1,
                createTime: new Date().toISOString().slice(0, 10),
                updateTime: new Date().toISOString().slice(0, 10),
            };

            // 将新数据添加到表格数据中
            tableData.push(newExpert);

            return { success: true, data: tableData };
        } else {
            throw new Error('新增专家失败');
        } 
    } catch (error) {
        console.error('新增专家失败:', error);
        throw new Error('新增专家失败');
    }
}

/**
 * 修改专家人员信息
 * @param {Object} data - 更新的数据
 * @param {Array} tableData - 当前表格数据
 * @returns {Promise<Object>} - 修改后的表格数据
 */
async function updateExpert(data, tableData) {
    try {
        const response = await apiRequest('POST', `/professor/editProfessor`, data);

        if (response.code === 200 && response.success) {
            const index = tableData.findIndex(item => item.id === data.id);
            if (index !== -1) {
                // 处理修改后的专家数据
                const updatedData = {
                    ...data,
                    updateTime: new Date().toISOString().slice(0, 10),
                };
                
                // 将修改后的专家数据插入到表格数据中
                tableData.splice(index, 1, updatedData);

                return { success: true, data: tableData };
            } else {
                throw new Error('专家未找到');
            }
        } else {
            throw new Error('修改专家失败');
        }
    } catch (error) {
        console.error('修改专家失败:', error);
        throw new Error('修改专家失败');
    }
}


/**
 * 删除专家人员
 * @param {number} id - 专家人员 ID
 * @param {Array} tableData - 当前表格数据
 * @returns {Promise<Object>} - 删除后的表格数据 
 */
async function deleteExpert(id, tableData) {
    try {
        const data = { id, is_del: 1 };
        const response = await apiRequest('POST', '/professor/UpdateProfessor', data);

        if (response.code === 200 && response.success) {
            // 更新删除后的表格数据
            const updatedTableData = tableData.filter(item => item.id !== id);
            return { success: true, data: updatedTableData };
        } else {
            throw new Error('删除专家失败');
        }
    } catch (error) {
        console.error('删除专家失败:', error);
        throw new Error(error.message || '删除专家失败');
    }
}

/**
 * 查询专家列表
 * @param {Object} searchData - 查询表单数据
 * @param {Object} pageData - 分页数据
 * @returns {Promise} - Promise对象，包含查询结果
 */
async function searchExpertList(searchData, pageData) {
    try {
        const data = {
            name: searchData.name,
            department: searchData.department,
            startDate: searchData.dateRange[0],
            endDate: searchData.dateRange[1],
            pageNum: pageData.currentPage,
            pageSize: pageData.pageSize,
        }
        const response = await apiRequest('POST', '/professor/getProfessorList', data);

        // 返回查询的专家列表
        if (response.code === 200 && response.success) {
            const transformedList = response.data.list.map((item, index) => ({
                id: item.id,
                name: item.name || "未知",
                department: item.branchname || "未知部门",
                post: item.zw || "未知职位",
                telephone: item.tel || "未知电话",
                createTime: item.createAt ? item.createAt.split(" ")[0] : "未知",
                updateTime: item.updateAt ? item.updateAt.split(" ")[0] : "未知",
                enable: item.isDel === null || item.isDel === false,
            }));
            return {success: true, data: transformedList}
        } else {
            throw new Error('查询专家失败');
        }
        
    } catch (error) {
        console.error('查询专家失败:', error);
        throw new Error(error.message || '查询专家失败');
    }
}

export {
    addExpert,
    updateExpert,
    deleteExpert,
    searchExpertList,
};
